<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <script>
      // - 1. 3 + 2 +"7"的结果是什么？3 + (2 + "7")的结果又是什么？这两个表达式输出的值是什么类型？数值相加与字符串拼接）
      // 答案："57" 字符串类型  "327" 字符串类型

      // - 2. 6 - false的结果是什么？（减法运算符）
      // 答案:6

      // - 3. 6 - "false"和6 + "false"的结果分别是什么？结果输出值是什么数据类型？（减法运算符和加法运算符的不同）
      // Number("false") 是NaN
      // 答案：NaN 和 "6false" 数字和字符串

      // - 4.请分析console.log(1 + - + + + - + 1)的结果？（一元运算符的运行顺序）
      // 答案：2

      // - 5.下面代码分别输出什么？前自增(自减)与后自增(自减)的区别？（自增自减）
      // 前自增是先自增后赋值 ，后自增是先赋值再自增；
      // let a = 1;
      // let b = ++a + ++a;
      // console.log(a); //3
      // console.log(b); //5

      // - 6.分析下面代码，请问 j 和 y 分别是 少？(不要运行代码，自己分析后写出答案)（自增自减）
      // var i = 100;
      // i++; // i是101
      // j = i++; // j先等于i j=101 后面i加1 i=102
      // y = ++j;// 上面的j等于101；然后再自增等于102 y=j 所以y等于102

      // console.log(j); //102
      // console.log(y); //102

      // - 7.JS中哪些值通过Boolean对象转换出来的值为`false`?
      // false、0、NaN、""、null、undefined

      // - 8.分析下面代码的结果并解释原因。（短路运算）
      // let a = 1;
      // let b = 2;

      // console.log(a && b); // 2
      // console.log(a || b); // 1

      // - 9.以下代码输出的结果分别是什么？（短路运算）
      // let a = true && "" && 12306;
      // let b = false || "" || undefined || "bluej" || 12306;
      // console.log(a);// ""
      // console.log(b);//"bluej"

      // - 10.分析下面代码，分别输出什么？(以注释形式写在console.log后面)（== 和 ===）

      // let str = "12306";
      // let str1 = 1;
      // let num = 12306;
      // let boo = true;

      // console.log(str == num);//true
      // console.log(str === num);//false
      // console.log(str1 == boo);//true
      // console.log(str1 === boo);// false

      // - 11.等于(==)与严格等于(===)的区别？
      // 答：等于(==)是判断值相等；严格等于(===)是值和类型都要相等

      // - 12.下面代码输出的分别是什么？除了typeof还有什么方法可以判断数据类型？（数据类型判断）

      // let str = "bluej";
      // let num = 12306;
      // let boo = false;
      // let arr = [];
      // let obj = {};

      // console.log(typeof str); // string
      // console.log(typeof num); // number
      // console.log(typeof boo); // boolean
      // console.log(typeof arr); // Object
      // console.log(typeof obj); // Object
      // console.log(typeof undefined); // undefined
      // console.log(typeof null); // object null是初始化对象的
      // 除了typeof还有什么方法可以判断数据类型？
      // 答：instanceof  constructor  Object.propotype.toString.call()

      // -------------以下题目为提高题,非必做-------------
      // - 写出执行结果,并解释原因（typeof）
      // var x = 1;
      // if (function f() {}) {
      //   x += typeof f;
      // }
      // console.log(x); //1undefined
      // if的（）中将 function f() {}变为一个表达式，是立即执行函数，执行后会销毁；
      // typeof 会将未定义的函数转化为undefined

      // - 写出执行结果,并解释原因（typeof）
      // var foo = {
      //   bar: function () {
      //     return this.baz;
      //   },
      //   baz: 1,
      // };
      // console.log(typeof (f = foo.bar)());
      // 答：f = foo.bar相当于 f=function(){return this.baz;} f() this指向window window上没有这个baz所以是undefined  typeof undefined 会得到undefined;

      // - 写出执行结果,并解释原因
      // const value  = 'Value is' + !!Number(['0']) ? 'yideng' : 'undefined';
      // console.log(value); // 'yideng'
      // 先执行 'Value is' + !!Number(['0'])  得到字符串"Value isfalse" 转为布尔值为true；
    </script>
  </body>
</html>
